This disclosure relates generally to the field of image processing. More particularly, but not by way of limitation, it relates to a technique for optimizing the rendering of an image using render graph characteristics.
An image-processing pipeline takes as input one or more images to be processed and one or more filters representing the processing to be performed and produces as output, a processed image. The process of applying the filters on the input image and producing the output image is called rendering.
One of the ways for an age-processing pipeline to perform rendering is to create a render graph, which is a graph representing the hierarchy of the filters to be applied on the input image to obtain the desired output image. A bottom-up traversal of the render-graph, rendering each node of the graph into an intermediate buffer, which is then used as input to the next render, results in the desired output image being rendered at the end of the last ender.
In many pipelines, the intermediate buffer resulting from the render of a graph node N, could be used as an input buffer by more than one parent graph node. For each such parent node that requests the output buffer from N, a render of N is performed, which in turn results in a render of all the descendant nodes of N in the render-graph.
Since the rendering of each graph node is an expensive operation, rendering the same node multiple times could result in very slow renders.